package cn.yunlang.zhangZhongFei.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.yunlang.zhangZhongFei.entity.SystemConfig;
import cn.yunlang.zhangZhongFei.mapper.SystemConfigMapper;
import cn.yunlang.zhangZhongFei.service.SystemConfigService;
import cn.yunlang.zhangZhongFei.vo.response.R;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

/**
 * 系统配置表 服务实现类
 *
 * @author ·
 * @since 2025-05-26 14:46:27
 */
@Service
public class SystemConfigServiceImpl extends ServiceImpl<SystemConfigMapper, SystemConfig>
    implements SystemConfigService {

  public R<IPage<SystemConfig>> pageConfig(Integer pageNo, Integer pageSize) {
    if (pageNo == null || pageSize == null) {
      return R.error(400, "分页参数不能为空");
    }
    LambdaQueryWrapper<SystemConfig> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(SystemConfig::getIsDelete, 0);
    IPage<SystemConfig> page = this.page(new Page<>(pageNo, pageSize), wrapper);
    return R.success(page);
  }

  public R<SystemConfig> getOne(Long systemConfigId) {
    if (systemConfigId == null) {
      return R.error(400, "ID不能为空");
    }
    SystemConfig config = this.getById(systemConfigId);
    if (config == null) {
      return R.error(404, "未找到系统配置");
    }
    return R.success(config);
  }

  public R<SystemConfig> getByKey(String key) {
    if (!StringUtils.hasText(key)) {
      return R.error(400, "key不能为空");
    }
    SystemConfig one =
        this.getOne(new LambdaQueryWrapper<SystemConfig>().eq(SystemConfig::getConfigKey, key));
    return R.success(one);
  }

  public R<String> addConfig(SystemConfig systemConfig) {
    if (systemConfig == null || !StringUtils.hasText(systemConfig.getConfigKey())) {
      return R.error(400, "配置key不能为空");
    }
    // key查重
    LambdaQueryWrapper<SystemConfig> wrapper = new LambdaQueryWrapper<>();
    wrapper.eq(SystemConfig::getConfigKey, systemConfig.getConfigKey());
    if (this.count(wrapper) > 0) {
      return R.error(400, "配置key已存在");
    }
    boolean save = this.save(systemConfig);
    return save ? R.success("新增成功") : R.error(500, "新增失败");
  }

  public R<String> deleteConfig(Long systemConfigId) {
    if (systemConfigId == null) {
      return R.error(400, "ID不能为空");
    }
    boolean remove = this.removeById(systemConfigId);
    return remove ? R.success("删除成功") : R.error(500, "删除失败");
  }

  public R<String> updateConfig(SystemConfig systemConfig) {
    if (systemConfig == null
        || systemConfig.getId() == null
        || !StringUtils.hasText(systemConfig.getConfigKey())) {
      return R.error(400, "ID和配置key不能为空");
    }
    // key查重
    LambdaQueryWrapper<SystemConfig> wrapper = new LambdaQueryWrapper<>();
    wrapper
        .eq(SystemConfig::getConfigKey, systemConfig.getConfigKey())
        .ne(SystemConfig::getId, systemConfig.getId());
    if (this.count(wrapper) > 0) {
      return R.error(400, "配置key已存在");
    }
    boolean update = this.updateById(systemConfig);
    return update ? R.success("修改成功") : R.error(500, "修改失败");
  }
}
